以往,在.Net 4.5出現之前,
不管是array還是List<T>,如果沒有妥善使用以及沒有限制地放置大量的物件與資料
很容易就會拿到一張OutOfMemory爆漿許可證。
DataSet、DataTable的資料儲存也經常因為SELECT * FROM....再次領到一張
沒辦法...誰叫這是CLR本身的一個極限
.Net 4.5問世之後,終於有機會可以突破這樣的2GB魔咒
以往,在.Net 4.5出現之前,
不管是array還是List<T>,如果沒有妥善使用以及沒有限制地放置大量的物件與資料
很容易就會拿到一張OutOfMemory爆漿許可證。
DataSet、DataTable的資料儲存也經常因為SELECT * FROM....再次領到一張
沒辦法...誰叫這是CLR本身的一個極限
.Net 4.5之後,可以在config檔裡頭
加上這麼一段敘述:
<gcAllowVeryLargeObjects enabled="true" />
最後,還是得叮嚀一下~~
請記住:
沒有任何系統是允許無限制地亂搞系統資源的!
請不要濫用萬用字元(SELECT * FROM....),只拿你需要用的欄位與資料列!
請好好限制資料查詢與暫存!
請珍惜系統資源~
wiselou提到:
果不其然,今天一名junior...領到了一張,
急急忙忙跑來說:我們的server是不是可以加個幾十GB的記憶體?
結果晚上他上 FB 留言:
今天我才不過要加幾十 GB 的記憶體
公司的 senior 就囉哩八嗦
拜託,才幾十 GB
我家裡的硬碟都幾 T 了耶
iT邦幫忙MVPantijava提到:
我家裡的Memory都幾 T 了耶
我想,這是一個很重要的迷失...
現在因為硬體限制有了很大的突破,所以寫程式時,總希望給記憶體人家有多多益善的感覺..
但事實並非如此...
16Bit,Offset 4Bit後,定址剛好是1024,32Bit後,是否還是用Offset 4Bit的方式來定址,我老早就已沒有再去研究了..
但是,不管是用什麼方法去定址,資料載入量永遠都會受到約束,即使已突破2GB的約束,還是要很省著用才是..
用越多的記憶體去載入更多的資料,只會降低機器的使用效能,同時也會降低整體網路的使用效能,更會造成伺服器的瞬間負載...
奉勸樓主應慎重考量程式的撰寫,整體效能才是你的最佳選項,而不是加記憶體或是你的硬碟有多少T來考量了...